package com.yuntai.pms.model.api;

import com.yuntai.pms.model.dto.system.UserQueryDto;
import com.yuntai.pms.model.entity.system.SysUser;
import com.yuntai.pms.model.result.PageResult;
import com.yuntai.pms.model.vo.UserDetailVo;

/**
 * @ClassName: UserService
 * @Description: 用户接口服务
 * @author 王勇琳
 * @date 2017年7月5日 下午5:10:21
 */
public interface UserService {

	public static String TYPE_EMAIL = "email";
	
	/**
	 * 根据用户输入的用户名查找库中的用户信息
	 * @author 王勇琳
	 * @date 2017年7月5日 下午5:10:32
	 * @param userName	用户输入的用户名，可能是user_name、phone_no、email中的一种
	 * @return
	 */
	UserDetailVo findUserByUserName(String userName);
	
	/** 用户注册
	* @author: caijg@hsyuntai.com
	* @date: 2017年8月17日 下午1:54:34
	* @param sysUser  
	*/
	void insertUserSelective(SysUser sysUser);
	
	/**根据提交的数据更新用户ID为 userID的用户的信息
	* @author: caijg@hsyuntai.com
	* @date: 2017年8月17日 下午1:53:25
	* @param userId
	* @param sysUser
	* @return    
	*/
	int updateUserbyUserIdSelective(Long userId, SysUser sysUser);
	
	/** 获得用户的详细信息
	* @author: caijg@hsyuntai.com
	* @date: 2017年8月17日 下午5:03:34
	* @return  PageResult
	*/
	PageResult<SysUser> searchUserDataByDto(UserQueryDto dto);
	
	/**
	 * 密码加密
	 * @author 王勇琳
	 * @date 2017年7月18日 下午7:11:54
	 * @param rawPwd
	 * @param salt
	 * @return
	 */
	String genEncriptPwd(String rawPwd, String salt);

	/**
	 * @Title: isUserNameAvailable
	 * @Description: 判断注册时所填的登录的关键字是否可用
	 * @param id
	 * @param type
	 * @param value
	 * @return
	 */
	Boolean isUserNameAvailable(String id, String type, String value) ;

	/**
	 * @Title: isUserNameAvailable
	 * @Description: 判断注册时所填的登录的关键字是否可用
	 * @param id
	 * @param type
	 * @param value
	 * @return
	 */
	Boolean isUserNameAvailable(String type, String value) ;
	
	/**
	 * @Title: cleanDisabledAuthority
	 * @Description:清除不在ids中的角色权限
	 * @param userId
	 * @param longs
	 */
	void cleanDisabledAuthority(Long userId, Long[] ids);

	/**
	 * @Title: roleAuthorize
	 * @Description: 给用户添加ids中的角色权限
	 * @param userId
	 * @param ids
	 */
	void roleAuthorize(Long userId, Long[] ids);
	
	/**
	 * 根据邮箱获取用户信息
	 * @param email
	 * @return
	 */
	UserDetailVo  findUserByEmail(String email);
	
	SysUser  findUserDetailById(Long userId);
	
}
